package com.yunke.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunke.entity.YunkeConfig;
import com.yunke.entity.vo.YunkeConfigVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 系统配置Mapper接口
 * 
 * @author yunke
 * @since 1.0.0
 */
@Mapper
public interface YunkeConfigMapper extends BaseMapper<YunkeConfig> {

    /**
     * 分页查询配置列表
     */
    IPage<YunkeConfigVo> selectConfigPage(Page<YunkeConfigVo> page,
                                         @Param("configCategory") String configCategory,
                                         @Param("configGroup") String configGroup,
                                         @Param("configName") String configName,
                                         @Param("isSystem") Boolean isSystem,
                                         @Param("isEnabled") Boolean isEnabled);

    /**
     * 根据分类查询配置列表
     */
    List<YunkeConfigVo> selectConfigByCategory(@Param("configCategory") String configCategory,
                                               @Param("isEnabled") Boolean isEnabled);

    /**
     * 根据配置组查询配置列表
     */
    List<YunkeConfigVo> selectConfigByGroup(@Param("configGroup") String configGroup,
                                            @Param("isEnabled") Boolean isEnabled);

    /**
     * 根据配置键名查询配置
     */
    YunkeConfigVo selectConfigByKey(@Param("configKey") String configKey);

    /**
     * 查询系统配置列表
     */
    List<YunkeConfigVo> selectSystemConfigs(@Param("isEnabled") Boolean isEnabled);

    /**
     * 查询用户可见配置列表
     */
    List<YunkeConfigVo> selectUserVisibleConfigs(@Param("isEnabled") Boolean isEnabled);

    /**
     * 查询配置分类列表
     */
    List<String> selectConfigCategories();

    /**
     * 查询配置组列表
     */
    List<String> selectConfigGroups(@Param("configCategory") String configCategory);

    /**
     * 批量更新配置状态
     */
    int updateConfigStatus(@Param("ids") List<Long> ids, @Param("status") Integer status);

    /**
     * 批量删除配置
     */
    int deleteConfigByIds(@Param("ids") List<Long> ids);

    /**
     * 统计配置数量
     */
    long countConfigs(@Param("configCategory") String configCategory,
                      @Param("isSystem") Boolean isSystem,
                      @Param("isEnabled") Boolean isEnabled);

    /**
     * 检查配置键名是否存在
     */
    int checkConfigKeyExists(@Param("configKey") String configKey, @Param("excludeId") Long excludeId);
} 